<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.14"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>LibQQt: Multi-link v1.0</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">LibQQt
   &#160;<span id="projectnumber">v3.1</span>
   </div>
   <div id="projectbrief">开源、跨平台Qt应用程序框架中间件</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">Multi-link v1.0 </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>v1.0仅仅支持链接LibQQt，并且依附在LibQQt代码中。 <br />
</p><ul>
<li>Qt Creator设置默认编译目录： <br />
%{JS: Util.asciify("/your/local/path/to/build/root/%{CurrentProject:Name}/%{CurrentKit:FileSystemName}/%{Qt:Version}/%{CurrentBuild:Name}")}</li>
</ul>
<h1>Multi-link v2.0</h1>
<p>在完成的Multi-link技术里，新的QSYS环境变量和Qt Kit的关系 <br />
QKIT不再使用，而仅仅使用QSYS。 <br />
 </p><table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Qt Kit  </th><th class="markdownTableHeadNone" colspan="3">Kit File System Nam   </th></tr>
<tr class="markdownTableBody" class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Windows 32bit  </td><td class="markdownTableBodyNone">Windows  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Windows   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowEven">
<td class="markdownTableBodyNone">Windows 32bit  </td><td class="markdownTableBodyNone">Win32  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Win32   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Windows 64bit  </td><td class="markdownTableBodyNone">Win64  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Win64   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowEven">
<td class="markdownTableBodyNone">Linux 32bit  </td><td class="markdownTableBodyNone">Linux  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Linux   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Linux 64bit  </td><td class="markdownTableBodyNone">Linux64  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Linux64   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowEven">
<td class="markdownTableBodyNone">macOS clang 64bit  </td><td class="markdownTableBodyNone">macOS  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">macOS   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Arm 32bit  </td><td class="markdownTableBodyNone">Arm32  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Arm32   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowEven">
<td class="markdownTableBodyNone">ArmHF 32bit  </td><td class="markdownTableBodyNone">Armhf32  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Armhf32   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Mips 32bit  </td><td class="markdownTableBodyNone">Mips32  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Mips32   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowEven">
<td class="markdownTableBodyNone">Embedded 32bit  </td><td class="markdownTableBodyNone">Embedded  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">Embedded   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowOdd">
<td class="markdownTableBodyNone">iOS clang  </td><td class="markdownTableBodyNone">iOS  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">iOS   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowEven">
<td class="markdownTableBodyNone">iOS Simulator  </td><td class="markdownTableBodyNone">﻿iOSSimulator  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">iOSSimulator   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Android armeabi  </td><td class="markdownTableBodyNone">﻿Android  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">﻿Android   </td></tr>
<tr class="markdownTableBody" class="markdownTableRowEven">
<td class="markdownTableBodyNone">Android x86  </td><td class="markdownTableBodyNone">﻿AndroidX86  </td><td class="markdownTableBodyLeft">-  </td><td class="markdownTableBodyLeft">﻿AndroidX86   </td></tr>
</table>
<h4>使用场景截图</h4>
<div class="image">
<img src="screenshot/11.png" alt="使用场景" title="这是Multi-link技术的使用方式截图"/>
</div>
<p> <br />
 </p><h4>Multi-link技术能够达到的管理能力</h4>
<p>App和Lib的源代码，一直处于编写之中。 <br />
App和Lib的目标，一直从Build位置，持续发布到Deploy位置和SDK位置。 <br />
用户再也不必为了管理生成目标、发布目标和链接而劳费手劲。 <br />
在2008年的时候还没有这个技术，2018年，这个技术终于变成了现实。 <br />
现在，按照GPL发布， <br />
基于qmake。 <br />
</p><div class="image">
<img src="screenshot/12.png" alt="Multi-link技术的能力" title="这是Multi-link技术的能力"/>
</div>
<p> <br />
 </p><h4>多链接技术创造的生产线</h4>
<p>Multi-link会一直处于App/Lib生产线的控制器地位。 <br />
Multi-link允许用户自行添加任何依赖项，我把一些常用的依赖项添加用pri放在了app-lib里， 而这些依赖项的SDK我保存在了百度网盘，以方便用户取用，用户只需要下载下来解压到自己的LIB_SDK_ROOT里。 <br />
百度网盘地址链接：https://pan.baidu.com/s/1FPPkTUnk2XBL4rpnZsAGmw 密码：hotz <br />
SDK难免有不全，难免不能满足任何用户的需求，请用户自行补齐。 利用Multi-link技术的添加Library模板很容易的。 </p><div class="image">
<img src="screenshot/13.png" alt="Multi-link技术的能力" title="这是Multi-link技术的能力"/>
</div>
<p> <br />
 </p><h4>多链接技术使用注意</h4>
<ol type="1">
<li>Multi-link 2.0已经不强调 build的编译路径设置。</li>
<li>也不强调对Qt Creator FileSystemName的设置。也就是不要求用户按照过去的要求设置Creator的默认编译路径。</li>
<li>Multi-link可以独立于任何Library App工程使用，建议作为submodule使用，能够可靠保证移植性。</li>
<li>但是QSYS_STD_DIR还是有用的，输出SDK和DeployAPP的时候使用。并且，QAPP_STD_DIR和这个SDK的路径还不一样，App发布用的有个Debug和Release的区分，SDK的没有（区分），在一起。</li>
</ol>
<h4>多链接技术已经支持的Library</h4>
<p>并且多链接技术已经提供了产品运行器和SDK链接文件编写辅助工具。 <br />
对Library的支持会持续更新。 <br />
用户也可以把使用的方便的add_library_xxx.pri发送给我到tianduanrui@163.com，我会把它加入app-lib族。 <br />
</p><div class="image">
<img src="screenshot/14.png" alt="Multi-link技术支持" title="这是Multi-link技术支持"/>
</div>
<p> <br />
 </p><h4>多链接技术配置工具</h4>
<div class="image">
<img src="screenshot/18.png" alt="Multi-link技术支持" title="这是Multi-link技术支持"/>
</div>
<p> <br />
</p>
<h1>Multi-link v2.1</h1>
<ul>
<li>v2.1默认不再链接QQt。 <br />
- 建议用户把multi-link作为子模块clone下来。 <br />
- 用户在include(multi-link/add_base_manager.pri)以后， <br />
 - add_dependent_manager(QQt) 就完成了链接、跟随发布QQt。（内部自动判断Proj类型，App Proj才会发布，Lib Proj不会发布。） <br />
 - add_custom_dependent_manager(xxx)是在自定义目录加载add_library_xxx.pri，默认工程当前目录。 <br />
 - add_create_dependent_manager(xxx)是在自定义目录加载add_library_xxx.pri，不存在则使用模板创建这个pri，默认app-lib目录。 <br />
- add_deploy() 或者 add_sdk()(Lib Proj) 是标准使用函数，任何工程都用他。</li>
<li>add_version() 添加版本。 <br />
- add_lanauage() 添加语言。 <br />
- 给用户提供了AddLibTool用于辅助用户从SDKROOT直接获取add_library_xxx.pri文件。 <br />
- ProductExecTool用于帮助用户从产品库里运行程序，程序太多的时候，一个一个深入目录点击运行也是比较不容易。 <br />
 <h1>多链接技术使用说明</h1>
</li>
</ul>
<p>看懂了v2的设计思路、原理以后，看看这里的多链接技术使用说明。 <br />
 </p><div class="image">
<img src="screenshot/17.png" alt="Multi-link 2.1使用说明"/>
</div>
<p> <br />
 </p><h1>Multi-link v2在操作系统中的地位</h1>
<p>在操作系统里Multi-link的地位如下，用户说这是嵌入式操作系统的结构，其实这也是桌面操作系统的结构。 <br />
Multi-link 2主要应用于App和App Framework层的多关系链接工作。 在这种二进制不兼容的多种多样的系统当中，这种链接方式非常有用。 <br />
在Library层，通常比较现代的工程管理工具为CMake，而在App层比较流行的工程管理工具为qmake，跟随Qt发布的qmake。 <br />
 </p><div class="image">
<img src="screenshot/15.jpg" alt="Multi-link的地位" title="Multi-link 2的地位"/>
</div>
<p> <br />
 <a href=".">返回</a> </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
</body>
</html>
